#ifndef _MMAP_FILE_H_
#define _MMAP_FILE_H_

#include <unistd.h>
#include <stdint.h>

namespace tfs{
    namespace largefile{

        struct MMapOption{
            int32_t  max_mmap_size_;   // 内存映射的最大大小
            int32_t  first_mmap_size_; // 第一次映射的大小
            int32_t  per_mmap_size_;   // 下一次映射的大小
        };

        class MMapFile{
        public:
            MMapFile();
            explicit MMapFile(int fd);
            MMapFile( int fd , const  MMapOption &option );

            ~MMapFile();
            
            // 将文件映射到内存
            bool mmap_file( const bool wirte = false);
            // 同步映射文件
            bool sync_file( );

            void *get_data( )const;   // 获取文件映射到内存的首地址
            int32_t get_size()const;  // 获取数据大小

            bool munmap_file( );     // 解除映射
            bool remap_file();       // 重新映射,追加映射内存
        private:    
            bool ensure_file_size(const int32_t size );  //对文件进行扩容

        private:
            int fd_;
            int32_t  file_size_;
            void  *data_;

            struct MMapOption mmap_file_option_;
        };
    }
}



#endif  // _MMAP_FILE_H_